﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data;
using System.Security.Cryptography;
using System.Text;
using System.Text.RegularExpressions;

/// <summary>
/// Summary description for GenerateDates
/// </summary>
public class GenerateDates
{
	public GenerateDates()
	{
		
	}

    /// <summary>
    /// Method này có nhiệm vụ trả về 12 tháng theo dạng dataset cho drowdownlist datasource
    /// </summary>
    /// <returns>dataset chưa 12 tháng</returns>
    public DataSet generateMonth()
    {
        DataSet ds = new DataSet();

        DataTable dt = new DataTable();

        dt.Columns.Add(new DataColumn("Text"));
        dt.Columns.Add(new DataColumn("Value"));

        for (int i = 1; i <= 12; i++)
        {
            DataRow dr = dt.NewRow();

            dr[0] = i;
            dr[1] = i;

            dt.Rows.Add(dr); 
        }

        ds.Tables.Add(dt);

        return ds;
    }

    /// <summary>
    /// Method này có nhiệm vụ trả về dataset chứa dải năm sinh cho drowdownlist datasource
    /// </summary>
    /// <returns>dataset chưa 12 tháng</returns>
    public DataSet generateYear()
    {
        DataSet ds = new DataSet();

        DataTable dt = new DataTable();

        dt.Columns.Add(new DataColumn("Text"));
        dt.Columns.Add(new DataColumn("Value"));

        for (int i = 1920; i <= 2013; i++)
        {
            DataRow dr = dt.NewRow();

            dr[0] = i;
            dr[1] = i;

            dt.Rows.Add(dr);
        }

        ds.Tables.Add(dt);

        return ds;
    }

    /// <summary>
    /// Method này có nhiệm vụ trả về dataset chứa dải ngày tùy theo tháng nhập vào cho drowdownlist datasource
    /// </summary>
    /// <returns>dataset chưa 12 tháng</returns>
    public DataSet generateDay(int year, int month)
    {
        DataSet ds = new DataSet();

        DataTable dt = new DataTable();

        dt.Columns.Add(new DataColumn("Text"));
        dt.Columns.Add(new DataColumn("Value"));

        
            switch (month)
            {
                case 1:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 2:
                    if ((year - 1900) % 4 == 0)
                    {
                        for (int i = 1; i <= 29; i++)
                        {
                            DataRow dr = dt.NewRow();

                            dr[0] = i;
                            dr[1] = i;

                            dt.Rows.Add(dr);
                        }
                    }
                    else
                    {
                        for (int i = 1; i <= 28; i++)
                        {
                            DataRow dr = dt.NewRow();

                            dr[0] = i;
                            dr[1] = i;

                            dt.Rows.Add(dr);
                        }
                    }
                    break;
                case 3:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 4:
                    for (int i = 1; i <= 30; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 5:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 6:
                    for (int i = 1; i <= 30; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 7:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 8:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 9:
                    for (int i = 1; i <= 30; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 10:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 11:
                    for (int i = 1; i <= 30; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
                case 12:
                    for (int i = 1; i <= 31; i++)
                    {
                        DataRow dr = dt.NewRow();

                        dr[0] = i;
                        dr[1] = i;

                        dt.Rows.Add(dr);
                    }
                    break;
            }
    
        ds.Tables.Add(dt);

        return ds;
    }

    /// <summary>
    /// method này có nhiệm vụ trả về id tiếp theo của student
    /// </summary>
    /// <param name="id">truyền vào id cuối cùng(lastest id)</param>
    /// <returns>trả về id tiếp theo</returns>
    public string generateStuID(string id) {

        int num = Convert.ToInt32(id.Substring(1, 5));
        char alphabet = Convert.ToChar(id.Substring(0, 1));
        string nextID = "";

        if (num != 99999)
        {
            num++;

            nextID += alphabet + num.ToString("00000");
        }
        else {
            alphabet++;

            num = 1;

            nextID += alphabet + String.Format("{0:X5}", num);
        }

        return nextID;
    }

    public string EncodePassword(string originalPassword)
    {
        //Declarations
        Byte[] originalBytes;
        Byte[] encodedBytes;
        MD5 md5;

        //Instantiate MD5CryptoServiceProvider, get bytes for original password and compute hash (encoded password)
        md5 = new MD5CryptoServiceProvider();
        originalBytes = ASCIIEncoding.Default.GetBytes(originalPassword);
        encodedBytes = md5.ComputeHash(originalBytes);

        //Convert encoded bytes back to a 'readable' string
        return Regex.Replace(BitConverter.ToString(encodedBytes), "-", "");
    }
}